import java.util.HashSet;

/*
 * @lc app=leetcode.cn id=2531 lang=java
 *
 * [2531] 使字符串总不同字符的数目相等
 *
 * https://leetcode.cn/problems/make-number-of-distinct-characters-equal/description/
 *
 * algorithms
 * Medium (29.11%)
 * Likes:    19
 * Dislikes: 0
 * Total Accepted:    5K
 * Total Submissions: 17.1K
 * Testcase Example:  '"ac"\n"b"'
 *
 * 给你两个下标从 0 开始的字符串 word1 和 word2 。
 * 
 * 一次 移动 由以下两个步骤组成：
 * 
 * 
 * 选中两个下标 i 和 j ，分别满足 0 <= i < word1.length 和 0 <= j < word2.length ，
 * 交换 word1[i] 和 word2[j] 。
 * 
 * 
 * 如果可以通过 恰好一次 移动，使 word1 和 word2 中不同字符的数目相等，则返回 true ；否则，返回 false 。
 * 
 * 
 * 
 * 示例 1：
 * 
 * 输入：word1 = "ac", word2 = "b"
 * 输出：false
 * 解释：交换任何一组下标都会导致第一个字符串中有 2 个不同的字符，而在第二个字符串中只有 1 个不同字符。
 * 
 * 
 * 示例 2：
 * 
 * 输入：word1 = "abcc", word2 = "aab"
 * 输出：true
 * 解释：交换第一个字符串的下标 2 和第二个字符串的下标 0 。之后得到 word1 = "abac" 和 word2 = "cab" ，各有 3
 * 个不同字符。
 * 
 * 
 * 示例 3：
 * 
 * 输入：word1 = "abcde", word2 = "fghij"
 * 输出：true
 * 解释：无论交换哪一组下标，两个字符串中都会有 5 个不同字符。
 * 
 * 
 * 
 * 提示：
 * 
 * 
 * 1 <= word1.length, word2.length <= 10^5
 * word1 和 word2 仅由小写英文字母组成。
 * 
 * 
 */

// @lc code=start
class Solution {
    public boolean isItPossible(String word1, String word2) {
        HashSet<Character> word1_1=new HashSet<>();
        HashSet<Character> word1_n=new HashSet<>();
        HashSet<Character> word2_1=new HashSet<>();
        HashSet<Character> word2_n=new HashSet<>();
        char[] chars=word1.toCharArray();
        for (char c : chars) {
            if (word1_1.contains(c)) {
                word1_n.add(c);
            }else{
                word1_1.add(c);
            }
        }
        chars=word2.toCharArray();
        for (char c : chars) {
            if (word2_1.contains(c)) {
                word2_n.add(c);
            }else{
                word2_1.add(c);
            }
        }

        for (char x : word1_1) {
            for (char y : word2_1) {
                if (x==y) {
                    if (word1_1.size()==word2_1.size()) {
                        return true;
                    }
                    continue;
                }
                int size1=word1_1.size();
                int size2=word2_1.size();
                if (!word1_n.contains(x)) {
                    size1--;
                }
                if (!word1_1.contains(y)) {
                    size1++;
                }
                if (!word2_n.contains(y)) {
                    size2--;
                }
                if (!word2_1.contains(x)) {
                    size2++;
                }
                if (size1==size2) {
                    return true;
                }
            }
           
        }
        return false;
    }
}
// @lc code=end

